package com.woniuxy.carlife.carlifegateway.jwt;


import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zjq
 * @PackageName:com.woniuxy.filter
 * @ClassName:AuthticationFilter
 * @Description:网关认证
 * @date 2021/3/23 23:01
 **/

@Component
@Slf4j
public class AuthticationFilter implements GlobalFilter {

    @Resource
    private GatewayJwtUtil gatewayJwtUtil;

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = exchange.getRequest().getHeaders().getFirst("token");
        System.out.println("token:" + token);
        //        获取url
        String path = exchange.getRequest().getURI().getPath();
        log.info("获取url");
        System.out.println(path);


        //            swagger
        if (path.equals("/users/v2/api-doc")) {
            return chain.filter(exchange);
        }

//        if (token == null) {
//
//
//            boolean b = StrUtil.containsAnyIgnoreCase(path, "users/user");
//            //如果是登录则放行
//            if (b) {
//                System.out.println("成功放行");
//                return chain.filter(exchange);
//            }
//
//
//            ////        设置响应json
//            exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
//
//            return exchange.getResponse().writeWith(Mono.fromSupplier(() -> {
//
//                return exchange.getResponse().bufferFactory().wrap("{\"响应回复\":\"用户未登录\"}".getBytes());
//            }));
//        }
//
//
//
//
////        用户能访问路径：/ordinary/**
//        boolean ordinary = StrUtil.containsAnyIgnoreCase(path, "user");
//        if (ordinary) {
//            System.out.println("-------------");
//            try {
//                Claims claims = gatewayJwtUtil.parseTokenOrdinary(token);
//
////                获取reids中的token比较
//                if (ObjectUtil.isNotNull(claims)) {
//                    return chain.filter(exchange);
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//                //            ////        设置响应json
//                exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
//                return exchange.getResponse().writeWith(Mono.fromSupplier(() -> {
//                    return exchange.getResponse().bufferFactory().wrap("{\"响应回复\":\"权限不足\"}".getBytes());
//                }));
//
//            }
//
//        }
//
//
////        判断路径是否是平台能访问路径：/platformmanage/**
//        boolean platformmanage = StrUtil.containsAnyIgnoreCase(path, "platformmanage");
//        if (ordinary) {
//
//            try {
//
//                gatewayJwtUtil.parseTokenPlatformmanage(token);
//
//            } catch (Exception e) {
//                e.printStackTrace();
//                //            ////        设置响应json
//                exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
//                return exchange.getResponse().writeWith(Mono.fromSupplier(() -> {
//                    return exchange.getResponse().bufferFactory().wrap("{\"响应回复\":\"权限不足\"}".getBytes());
//                }));
//
//            }
//
//        }
//
////        商家能访问路劲:/merchantmanage/**
//
//        boolean merchantmanage = StrUtil.containsAnyIgnoreCase(path, "merchantmanage");
//        if (ordinary) {
//
//            try {
//                gatewayJwtUtil.parseTokenMerchantmanage(token);
//            } catch (Exception e) {
//                e.printStackTrace();
//                //            ////        设置响应json
//                exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
//                return exchange.getResponse().writeWith(Mono.fromSupplier(() -> {
//                    return exchange.getResponse().bufferFactory().wrap("{\"响应回复\":\"权限不足\"}".getBytes());
//                }));
//
//            }
//
//        }


        return chain.filter(exchange);
    }
}
